import axios, {AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError, InternalAxiosRequestConfig} from 'axios';
import {config} from "dotenv";

// 创建Axios实例
const axiosInstance: AxiosInstance = axios.create({
    baseURL: 'https://jsonplaceholder.typicode.com', // 这里可以替换成你的API基础路径
    timeout: 100000,
    headers: {
        'Content-Type': 'application/json',
    },
});

// 请求拦截器
// @ts-ignore
axiosInstance.interceptors.request.use(
    (config: InternalAxiosRequestConfig) => {
        // 在发送请求之前做些什么

        let token;
        token = "AD_MLUL1yW2ZGSMz4q40BcCnpBzhPdzooSb";
        config.headers.Authorization = `Bearer ${token}`;
        return config;

    },
    (error: AxiosError) => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    (response: AxiosResponse) => {
        // 对响应数据做点什么
        return response;
    },
    (error: AxiosError) => {
        // 对响应错误做点什么
        if (error.response) {
            // 请求已发出，但服务器响应的状态码不在2xx范围内
            console.error('Response error:', error.response.data);
        } else {
            // 一些错误是在设置请求的时候触发的
            console.error('Request error:', error.message);
        }
        return Promise.reject(error);
    }
);

// 封装GET请求
const get = async <T>(url: string, params?: Record<string, any>): Promise<T> => {
    try {
        const response: AxiosResponse<T> = await axiosInstance.get(url, {params});
        return response.data;
    } catch (error) {
        throw error;
    }
};

// 封装POST请求
const post = async <T>(url: string, data?: Record<string, any>): Promise<T> => {
    try {
        const response: AxiosResponse<T> = await axiosInstance.post(url, data);
        return response.data;
    } catch (error) {
        throw error;
    }
};

// 其他方法（PUT, DELETE等）可以类似封装

export {get, post};
